package leetcode_双指针;

/**
 * 盛最多水的容器
 * 算法：双指针 + 贪心
 * 水桶原理, 盛最多的水取决于最短的木板
 * 最开始, 取全部的 x 轴, 这时候长最大, (l = 0, r = n - 1) 取 nums[l] 和 nums[r] 的最小值
 * 如果 nums[l] < nums[r], l 往右移, 因为长减小了, 要使最短木板变大, 需要使两端变大, 所以移动元素值较小一端的指针
 *
 * @author yzh
 * @version 1.0
 * @date 2022/3/19 17:09
 */
public class _11 {

    public int maxArea_new(int[] height) {
        int ans = 0, l = 0, r = height.length - 1;
        while (l < r) {
            if (height[l] < height[r]) {
                ans = Math.max(ans, height[l] * (r - l));
                ++l;
            } else {
                ans = Math.max(ans, height[r] * (r - l));
                --r;
            }
        }
        return ans;
    }

    public int maxArea(int[] height) {
        int ans = 0;
        int l = 0, r = height.length - 1;
        while (l < r) {
            ans = Math.max(ans, (r - l) * Math.min(height[l], height[r]));
            if (height[l] < height[r]) ++l;
            else --r;
        }
        return ans;
    }

}
